package epoch.game.core.function;

import epoch.game.core.common.Loggers;

/**
 * 函数工具类
 * @author will
 * @date 2016年4月12日 下午3:11:55
 */
public final class FuncUtil {
	
	
	/**
	 * 执行方法逻辑
	 * @param method
	 * @param params
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static void apply(Object method, Object... params){
		Object[] p = params;
		if (p == null || p.length == 0) {
			((IFunc0) method).apply();
		} else {
			int paramLen = p.length;
			switch (paramLen) {
			case 1:
				try {
					((IFunc1) method).apply(p[0]);
				} catch (Exception ex) {
					Loggers.CORE_LOGGER.error(method);
					throw ex;
				}
				break;
			case 2:
				((IFunc2) method).apply(p[0], p[1]);
				break;
			case 3:
				((IFunc3) method).apply(p[0], p[1], p[2]);
				break;
			case 4:
				((IFunc4) method).apply(p[0], p[1], p[2], p[3]);
				break;
			case 5:
				((IFunc5) method).apply(p[0], p[1], p[2], p[3], p[4]);
				break;
			case 6:
				((IFunc6) method).apply(p[0], p[1], p[2], p[3], p[4], p[5]);
				break;
			case 7:
				((IFunc7) method).apply(p[0], p[1], p[2], p[3], p[4], p[5], p[6]);
				break;
			case 8:
				((IFunc8) method).apply(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
				break;
			case 9:
				((IFunc9) method).apply(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8]);
				break;
			case 10:
				((IFunc10)method).apply(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9]);
				break;
			}
		}
	}
}
